package com.wnxy.mallserver.util;

import com.wnxy.mallserver.service.OrderService;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 处理订单超时
 * 线程池分类：
 *  newFixedThreadPool(10)  固定线程池,数量是固定的
 *  newSingleThreadExecutor();  单线程池
 *  newCachedThreadPool()   可变线程池，根据任务的数量自动增加/减少线程池数量
 *  newScheduledThreadPool()    周期性线程池，每隔一段时间去执行一次任务。括号里的是时间
 *  自定义线程池
 *  ……
 */
@Component//放到IOC容器中
public class OrderExpireUtil {
    @Resource
    private OrderService orderService;
//    @Resource
//    private KillService killService;

    //创建线程池-固定线程池。
    private  static ExecutorService executors = Executors.newFixedThreadPool(10);

    //处理订单超时
    public void handleExpire(String orderno){
        //执行任务（创建任务）
        executors.execute(new ExpireRunnable(orderno));
    }
    /**
     * 订单超时内部类，
     * 因为交给线程池处理的是一个接口，所以可以自己定义一个类去实现runnable接口
     *
     * */
    private class ExpireRunnable implements Runnable{
        //提供属性
        private String orderno;
        //构造方法
        public ExpireRunnable(String orderno) {
            this.orderno = orderno;
        }

        @Override
        public void run() {
            //调订单的service去处理订单
            orderService.expire(orderno);
        }
    }


//    //添加秒杀信息
//    public void addKill(int kid){
//        executors.execute(new AddKillRunnable(kid));
//    }
//    /**添加秒杀内部类*/
//    private class AddKillRunnable implements Runnable{
//        private int kid;
//        public AddKillRunnable(int kid) {
//            this.kid = kid;
//        }
//
//        @Override
//        public void run() {
//            //调秒杀的service去处理
//            killService.addKillToRedis(kid);
//
//        }
//    }
//    //移除秒杀信息
//    public void removeKill(int kid){
//        executors.execute(new RemoveKillRunnable(kid));
//    }
//    /**移除秒杀内部类*/
//    private class RemoveKillRunnable implements Runnable{
//        private int kid;
//        public RemoveKillRunnable(int kid) {
//            this.kid = kid;
//        }
//
//        @Override
//        public void run() {
//            //调秒杀的service去处理
//            killService.RemoveKillFromRedis(kid);
//
//        }
//    }

}
















